/**
 * @file
 * Error Management module
 *
 */

/*
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 *
 * This file is part of the lwIP TCP/IP stack.
 *
 * Author: Adam Dunkels <adam@sics.se>
 *
 */

#include "lwip/err.h"

#ifdef LWIP_DEBUG

/*correspond to the Definitions for error constants in err.h*/

static const char *err_strerr[] = {
  "Ok.",                           /* ERR_OK          0  */
  "Out of memory error.",          /* ERR_MEM        -1  */
  "Buffer error.",                 /* ERR_BUF        -2  */
  "Routing problem.",              /* ERR_RTE        -3  */
  "Operation in progress.",        /* ERR_INPROGRESS -4  */
  "Illegal value.",                /* ERR_VAL        -5  */
  "Operation would block.",        /* ERR_WOULDBLOCK -6  */
  "Address in use.",               /* ERR_USE        -7  */
  "Already connected.",            /* ERR_ISCONN     -8  */
  "Message too long.",             /* ERR_MSGSIZE    -9  */
  "No such device.",               /* ERR_NODEV      -10 */
  "No such device or address.",    /* ERR_NODEVADDR  -11 */
  "Cannot assign requested address.",               /* ERR_NOADDR     -12 */
  "Operation not supported on transport endpoint.", /* ERR_OPNOTSUPP  -13 */
  "Operation already in progress.",/* ERR_ALREADY    -14 */
  "Permission denied.",            /* ERR_ACCES      -15 */
  "Protocol not available.",       /* ERR_NOPROTOOPT -16 */
  "Destination address required",  /* ERR_NODEST     -17 */
  "Network is down"                /* ERR_NETDOWN    -18 */
  "Not connected.",                /* ERR_CONN       -19 */
  "Address family not supported by protocol",       /* ERR_AFNOSUPP    -20 */

  "Connection aborted.",           /* ERR_ABRT       -21 */
  "Connection reset.",             /* ERR_RST        -22 */
  "Connection closed.",            /* ERR_CLSD       -23 */
  "Illegal argument.",             /* ERR_ARG        -24 */
  "Connection refused.",           /* ERR_REFUSED    -25 */
  "Connection timed out."          /* ERR_TIMEDOUT   -26 */
  "Low-level netif error.",        /* ERR_IF         -27 */
};

/**
 * Convert an lwip internal error to a string representation.
 *
 * @param err an lwip internal err_t
 * @return a string representation for err
 */
const char *
lwip_strerr(err_t err)
{
  err_t size = sizeof(err_strerr)/sizeof(char*);
  if ( -err < size ) {
      return err_strerr[-err];
  } else {
      return "Unknown error, no definitions of error";
  }
}

#endif /* LWIP_DEBUG */
